如何使用 ChatGPT 生成高赞小红书标题、标签和内容? 最近有个很火的应用:ChatPDFChatPDF这个应用最近非常火,用户只要上传自己的pdf就可以通过聊天的方式询问这个PDF的内容。我上传了阿里Java开发手册尝试了一下,效果还是很惊艳的,读一本书的效率瞬间提高了很多。…

最近有个很火的应用:ChatPDF

ChatPDF 这个应用最近非常火,用户只要上传自己的 pdf 就可以通过聊天的方式询问这个 PDF 的内容。我上传了阿里 Java 开发手册尝试了一下,效果还是很惊艳的,读一本书的效率瞬间提高了很多。

ChatPDF 原理

在网上搜索了一下 ChatPDF 的实现原理,发现了这篇文章,https://v2ex.com/t/921750,这篇文章是根据 https://github.com/mckaywrigley/paul-graham-gpt 这个开源库来总结的,大概就是将源数据拆成若干片段,然后获取这些片段的 embedding。再获取问题的 embedding,根据 embedding 计算片段和问题最接近的 n 个片段,然后将这些片段塞给 ChatGPT,用户对 ChatGPT 询问,ChatGPT 会根据塞给的 n 个片段进行回答。总结来说 ChatGPT 的优势在于将已有的知识用更人性化的方式说了一遍。

ChatGPT + 小红书 = ChatXiaoHongShu

我在想是不是可以用同样的方法来做一个小工具,然后想到了小红书,小红书推文分为标题、内容和标签三个主要部分,是不是可以做一个根据小红书内容生成标题或者标签的 AI 工具。我们先用 chatgpt 测试一下它是不是具备这样的功能。我们先问一下 ChatGPT 是不是知道小红书,确定它理解小红书这个应用。然后输入一个小红书的推文内容,让 ChatGPT 生成给出一个吸引人的标题。

从生成的结果上看还是可以得到一个不错的结果的。

训练 ChatGPT

根据最新的消息,openai 已经开发了 chatgpt 的接口,我翻阅了 openai 的文档,根据 openai 文档上显示的 chatgpt 模型目前不能训练,只能塞给 chatgpt api 一些上下文信息,然后对 chatgpt 进行询问得到答案。这个限制导致我们不能训练特定类型的 chatgpt,不过我们可以在 chatgpt 上预设一些示例对话内容:

{"role": "system", "content": "你是一个小红书作家,我输入一篇小红书推文,你给这个小红书起一个名字。"}
{"role": "user", "content": "小红书的内容"}
{"role": "assistant", "content": "小红书的标题"}
{"role": "user", "content": "小红书的内容"}

最后一条消息是让 chatgpt 生成一个指定小红书的内容。类似的也可以让 chatgpt 根据推文内容生成小红书风格的标签;根据标题或者标签生成推文内容。

Fine Tune 模型

OpenAI 还提供一种自己训练模型的方法,fine tuning。准备 promt 和 completion 数据然后训练模型,最后使用这些模型来补全生成的内容。

{"prompt": "推文内容1", "completion": "标题1"}
{"prompt": "推文内容2", "completion": "标题2"}

我使用 davinci 模型作为基础模型,然后将准备的数据上到 openai,调用 fine-tune 接口训练模型。将训练成功的模型传给 Completion 接口进行调用,传入需要测试的推文内容,得到结果。

# 准备训练数据
messages = []
with open('posts.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        messages.append(json.dumps({"prompt": rows['prompt'], "completion": row['completion']}))

# 写入训练数据到文件,文件必须是JSON Lines格式,https://jsonlines.readthedocs.io/en/latest/
with open('train.jsonl', 'a') as f:
    for message in messages:
        f.write(message + "\n")

# 上传训练数据到OpenAI
upload_file = openai.File.create(file=open("train.jsonl"), purpose='fine-tune', )
print(upload_file)

# 训练模型
fine_tune_response  = openai.FineTune.create(training_file='文件ID', model='davinci')
print(fine_tune_response)

# 获取模型信息
fine_tune_response = openai.FineTune.retrieve(id='模型ID')
print(fine_tune_response)

# 列出所有Fine Tune模型
fine_tune_models = openai.FineTune.list()
print(fine_tune_models)

# 测试模型效果
new_prompt = "村上春树说:有的人会用一辈子治愈童年,有的人会用童年治愈一辈子。了解自己身上的习惯,看透自己原生家庭的痛和乐。\n书名:《原生家庭》\n作者: (美)苏珊·福沃德博士 / (美)克雷格·巴克\n有毒家庭千千万,作者将其总结为“天下无不是的父母”、“不称职的父母”、“操控型的父母”、“酗酒型的父母”、“身体虐待型的父母”、“言语虐待型的父母”和“性虐待型的父母”,这些父母对孩子的负面模式持续存在(而不是偶尔的),始终支配着孩子的生活,影响着孩子与人的正常交际交往。\n当然,要判断自己的原生家庭是否有毒确实不是一件容易的事情,因而苏珊还提供了调查问卷,帮助读者进行自测。\n书中内容:\n如何判断自己的原生家庭种类\n有毒的父母会对孩子造成什么样的伤害?\n做才能摆脱原生家庭的负面影响?\n读完的感受:\n简单来说,看完苏珊的《原生家庭:如何修补自己的性格缺陷》真的帮助我认识到自己许久以来人际交往的通病产生的本质原因。\n发现自己,接纳自己,才会治愈自己。\n很有意义的一本书。希望可以帮助到更多需要帮助的宝子。"
answer = openai.Completion.create(
    model='模型名',
    prompt=new_prompt,
    max_tokens=1000
)
print(answer)

总结

最后结果是使用 ChatGPT 方法可以快速生成小红书标题和标签以及内容,但是不能用小红书数据训练 ChatGPT 让它变得更专业。使用 Fine Tune 方法可以使用自己的数据训练模型,效果根据训练数据来决定。

附录

这进行上面这个探索的过程中,制作了一些工具用于解决一些问题。

自动提取小红书数据工具

为了使用 Fine Tune 方法训练模型,需要准备大量的小红书推文数据。工具核心的原理是在小红书 APP 上复制你要提取的推文链接,然后在电脑浏览器打开,使用插件提取小红书内容,将这些提取出来的数据存储到文件里。关于这个工具更详细的内容可以查看这篇文章:

Jerry 学长:如何自动提取小红书推文数据?

ChatGPT 接口调用和 Fine Tune 接口调用脚本

这两个是脚本工具,用于和 OpenAI 接口进行交互,达到我们提交测试数据和获取结果的目的。

Jerry 学长:如何通过 API 训练 ChatGPT ?Jerry 学长:如何使用小红书数据微调 OpenAI GPT-3 模型实现自动生成小红书标题 AI 工具?

如果你想了解这个工具更多细节,可以点击下面的咨询链接联系我哦!

Jerry 学长
5 次咨询
5.0
悉尼大学 信息技术硕士
615 次赞同
去咨询
最近有个很火的应用:ChatPDFChatPDF 原理ChatGPT + 小红书 = ChatXiaoHongShu训练 ChatGPTFine Tune 模型总结附录自动提取小红书数据工具ChatGPT 接口调用和 Fine Tune 接口调用脚本 全文完
本文由 简悦 SimpRead 转码,用以提升阅读体验,原文地址